home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyEnterPassword.p < prev    next >
Encoding:
Text File  |  1997-04-28  |  3.7 KB  |  164 lines  |  [TEXT/CWIE]

  1. unit MyEnterPassword;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Events, Dialogs;
  7.  
  8.     procedure CreateEnterPassword (var p: Ptr; dlg: DialogPtr; item: integer);
  9.     procedure DisposeEnterPassword (var p: Ptr);
  10.     procedure HandleEnterPassword (p: Ptr; var er: EventRecord);
  11.     procedure GetEnterPassword (p: Ptr; var password: Str255);
  12.     procedure SetEnterPassword (var p: Ptr; password: Str255);
  13.     procedure PasteEnterPassword (p: Ptr; h: Handle);
  14.     procedure DeleteEnterPassword (p: Ptr);
  15.  
  16. implementation
  17.  
  18.     uses
  19.         MyStrings, MyTypes, MyUtils, MyDialogs, MyEvents, MyLowLevel, MyMemory;
  20.  
  21.     const
  22.         my_bullet = '•';
  23.  
  24.     type
  25.         EPRecord = record
  26.                 teh: TEHandle;
  27.                 dlg: DialogPtr;
  28.                 item: integer;
  29.             end;
  30.         EPRecordPtr = ^EPRecord;
  31.  
  32.     procedure CreateEnterPassword (var p: Ptr; dlg: DialogPtr; item: integer);
  33.         var
  34.             dest, view: Rect;
  35.             ep: EPRecordPtr;
  36.             junk: OSErr;
  37.     begin
  38.         SetPort(dlg);
  39.         junk := MNewPtr( ep, SizeOf(EPRecord) );
  40.         SetRect(dest, 8000, 8010, 8100, 8020);
  41.         view := dest;
  42.         ep^.teh := TENew(dest, view);
  43.         ep^.dlg := dlg;
  44.         ep^.item := item;
  45. {    h := TEGetText(ep^.teh);}
  46.         p := Ptr(ep);
  47.     end;
  48.  
  49.     procedure DisposeEnterPassword (var p: Ptr);
  50.         var
  51.             ep: EPRecordPtr;
  52.     begin
  53.         ep := EPRecordPtr(p);
  54.         TEDispose(ep^.teh);
  55.         MDisposePtr( ep );
  56.         p := nil;
  57.     end;
  58.  
  59.     procedure SetEnterPassword (var p: Ptr; password: Str255);
  60.         var
  61.             ep: EPRecordPtr;
  62.             i: integer;
  63.     begin
  64.         ep := EPRecordPtr(p);
  65.         TESetText(@password[1], length(password), ep^.teh);
  66.         for i := 1 to length(password) do begin
  67.             password[i] := my_bullet;
  68.         end;
  69.         SetItemText(ep^.dlg, ep^.item, password);
  70.     end;
  71.  
  72.     procedure GetEnterPassword (p: Ptr; var password: Str255);
  73.         var
  74.             ep: EPRecordPtr;
  75.             h: CharsHandle;
  76.     begin
  77.         ep := EPRecordPtr(p);
  78.         h := TEGetText(ep^.teh);
  79.         HandleToString(h, password);
  80.     end;
  81.  
  82.     procedure HandleEnterPassword (p: Ptr; var er: EventRecord);
  83.         var
  84.             ep: EPRecordPtr;
  85.             ch: Char;
  86.     begin
  87.         ep := EPRecordPtr(p);
  88.         if (ep^.dlg = FrontWindow) & (SelectedTextItem(ep^.dlg) = ep^.item) then begin
  89.             if EventIsKeyDown( er ) & not EventHasCommandKey( er ) then begin
  90.                 ch := EventChar( er );
  91.                 case ch of
  92.                     cr, esc, enter, tab, leftArrow, rightArrow, upArrow, downArrow: 
  93.                         ;
  94.                     otherwise begin
  95.                         if (ch <> bs) & (ch < spc) then begin
  96.                             SysBeep(1);
  97.                             er.what := nullEvent;
  98.                         end else begin
  99.                             TESetSelect(DialogPeek(ep^.dlg)^.textH^^.selStart, DialogPeek(ep^.dlg)^.textH^^.selEnd, ep^.teh);
  100.                             TEKey(ch, ep^.teh);
  101.                             if (ch <> bs) & DirtyKey(ch) then begin
  102.                                 er.message := ord(my_bullet);
  103.                             end;
  104.                         end;
  105.                     end;
  106.                 end;
  107.             end;
  108.         end;
  109.     end;
  110.  
  111.     procedure PasteEnterPassword (p: Ptr; h: Handle);
  112.         var
  113.             ep: EPRecordPtr;
  114.             len: longint;
  115.             i: integer;
  116.             s: Str255;
  117.             bad: boolean;
  118.             th: TEHandle;
  119.     begin
  120.         ep := EPRecordPtr(p);
  121.         if (SelectedTextItem(ep^.dlg) = ep^.item) then begin
  122.             len := GetHandleSize(h);
  123.             bad := len > 255;
  124.             if not bad then begin
  125.                 for i := 0 to len - 1 do begin
  126.                     if BAND(AddPtrLong(h^, i)^, $FF) < 32 then begin
  127.                         bad := true;
  128.                         leave;
  129.                     end;
  130.                 end;
  131.             end;
  132.             if bad then begin
  133.                 SysBeep(1);
  134.             end else begin
  135.                 th := DialogPeek(ep^.dlg)^.textH;
  136.                 HLock(h);
  137.                 TESetSelect(th^^.selStart, th^^.selEnd, ep^.teh);
  138.                 TEDelete(ep^.teh);
  139.                 TEInsert(h^, len, ep^.teh);
  140.                 s[0] := chr(len);
  141.                 for i := 1 to len do begin
  142.                     s[i] := my_bullet;
  143.                 end;
  144.                 TEDelete(th);
  145.                 TEInsert(@s[1], len, th);
  146.             end;
  147.         end;
  148.     end;
  149.     
  150.     procedure DeleteEnterPassword (p: Ptr);
  151.         var
  152.             ep: EPRecordPtr;
  153.             th: TEHandle;
  154.     begin
  155.         ep := EPRecordPtr(p);
  156.         if (SelectedTextItem(ep^.dlg) = ep^.item) then begin
  157.             th := DialogPeek(ep^.dlg)^.textH;
  158.             TESetSelect(th^^.selStart, th^^.selEnd, ep^.teh);
  159.             TEDelete(ep^.teh);
  160.             TEDelete(th);
  161.         end;
  162.     end;
  163.     
  164. end.